<?php
/**
 * Стартовый плагин, установка стартовых параметров в системе
 *
 *
 */
class Arm_Controller_Plugin_Bootstrap extends Zend_Controller_Plugin_Abstract
{
    /**
     * Route startup handler
     *
     * @param Zend_Controller_Request_Abstract $request
     */
    public function routeStartup(Zend_Controller_Request_Abstract $request)
    {
        $module = Arm_Core::getNameModuleRequestUri();
        $moduleDefault = Zend_Controller_Front::getInstance()->getDefaultModule();
        if( false === $module ) {
            $module = $moduleDefault;
        }
        $config  = Arm_Module::getInstance()->getConfigRoutes($module);
        if($config === false) {
            // нет маршрутов
            return;
        }
        Zend_Controller_Front::getInstance()->getRouter()->addConfig($config);
    }

    /**
     * Проверка зарегистрировани ли язык в системе, не выключен ли вызываемый модуль
     * @param Zend_Controller_Request_Abstract $request
     */
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        // смотрим нету ли ошибки по языкам.
        $le = Arm_Translate::getInstance()->getErrorLang();
        if($le !== false) {
            $e = new Arm_Translate_Exception(Arm_Translate::_('В системе не зарегистрирован язык "%s"', $le), 404);
            return $this->_setErrorController($request, $e);
        } else {
            Arm_Translate::getInstance()->addTranslateModule($request->getModuleName());
        }
 
      // Проверка что модуль не выключен
        $modules = Arm_Module::getInstance()->getDataModules();
        if(0 === (int)$modules[$request->getModuleName()]['on']) {
            $e = new Arm_Module_Exception(Arm_Translate::_('Модуль %s временно выключен', $request->getModuleName()));
            return $this->_setErrorController($request, $e);
        }
        
        // Добавления путей помощников контролеров текущего модуля
        $path = Arm_Core::getPathModule($request->getModuleName()) . 'controllers/helpers';
        Zend_Controller_Action_HelperBroker::addPath($path, ucfirst($request->getModuleName()) . '_Controller_Helper');
    }


    
    /**
     * Установка обработчика ошибок.
     * @param Zend_Controller_Request_Abstract $request
     * @param Exception $exception
     * @return Zend_Controller_Request_Abstract
     */
    protected function _setErrorController(Zend_Controller_Request_Abstract $request, Exception $exception)
    {
        $request->setModuleName('default');
        $request->setControllerName('error');
        $request->setActionName('error');
        $error = new ArrayObject();
        $error->type = get_class($exception);
        $error->exception = $exception;
        $error->request = $request;
        $request->setParam('error_handler', $error);
        Arm_Translate::getInstance()->addTranslateModule('default');
        return $request;      
    }

}